/**
 * 图片URL处理工具函数
 */

/**
 * 格式化图片URL，确保图片URL格式一致
 * @param {string} url - 原始图片URL
 * @returns {string} 格式化后的图片URL
 */
export function formatImageUrl(url) {
  if (!url) return '';
  
  // 添加调试日志
  console.log('formatImageUrl - 原始URL:', url);
  
  const baseUrl = window.location.origin; // 例如 http://localhost:3001
  let finalUrl = url;
  
  try {
    // 移除URL末尾可能存在的:1等后缀
    finalUrl = url.split(':')[0];
    
    // 如果是完整的URL，直接返回
    if (finalUrl.startsWith('http://') || finalUrl.startsWith('https://')) {
      console.log('formatImageUrl - 已是完整URL:', finalUrl);
      return finalUrl;
    }
    
    // 如果以/uploads开头，直接添加域名
    if (finalUrl.startsWith('/uploads/')) {
      finalUrl = `${baseUrl}${finalUrl}`;
      console.log('formatImageUrl - 添加域名到uploads路径:', finalUrl);
      return finalUrl;
    }
    
    // 如果是相对路径但不以/开头，添加/uploads/前缀
    if (!finalUrl.startsWith('/')) {
      finalUrl = `${baseUrl}/uploads/${finalUrl}`;
      console.log('formatImageUrl - 添加uploads路径:', finalUrl);
      return finalUrl;
    }
    
    // 其他情况，直接添加域名
    finalUrl = `${baseUrl}${finalUrl}`;
    console.log('formatImageUrl - 添加域名:', finalUrl);
    return finalUrl;
    
  } catch (error) {
    console.error('formatImageUrl - 处理URL时出错:', error);
    return url; // 错误时返回原始URL
  }
}

/**
 * 检查图片是否存在且可加载
 * @param {string} url - 图片URL
 * @returns {Promise<boolean>} 图片是否可访问
 */
export function checkImageAccessibility(url) {
  return new Promise((resolve) => {
    if (!url) {
      resolve(false);
      return;
    }
    
    const img = new Image();
    img.crossOrigin = "anonymous"; // 解决跨域问题
    
    img.onload = () => resolve(true);
    img.onerror = () => resolve(false);
    img.src = url;
    
    // 设置超时，防止无限等待
    setTimeout(() => resolve(false), 5000);
  });
}

/**
 * 预加载图片
 * @param {string} url - 图片URL
 * @returns {Promise<HTMLImageElement>} 图片元素
 */
export function preloadImage(url) {
  return new Promise((resolve, reject) => {
    if (!url) {
      reject(new Error('图片URL为空'));
      return;
    }
    
    const img = new Image();
    img.crossOrigin = "anonymous";
    img.onload = () => resolve(img);
    img.onerror = () => reject(new Error('图片加载失败'));
    img.src = formatImageUrl(url);
  });
}

export default {
  formatImageUrl,
  checkImageAccessibility,
  preloadImage
}; 